package demo02;

import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Demo01InputStreamReader {
    public static void main(String[] args) {
        /*
         *  InputStreamReader类的构造方法：
         *      InputStreamReader(InputStream in)：创建一个使用默认字符集的字符输入转换流
         *      InputStreamReader(InputStream in, String charsetName)：创建一个指定字符集的字符输入转换流
         *  注意：
         *      1. InputStreamReader类是Reader字符输入流的子类
         *      2. 参数为InputStream字节输入流及其子类，不可填入字符输入流
         *      3. charsetName参数如果不填写，该流使用的字符集为默认字符集（系统默认字符集为gbk，vscode与系统同步，idea默认字符集为utf-8）
         *      4. charsetName参数如果填写，则该流使用指定的字符集
         */
        try (InputStreamReader inputStreamReaderUtf8 = new InputStreamReader( // 创建字符输入转换流，参数为文件字节输入流
                new FileInputStream("file\\charsetTxt\\utf8.txt"), "utf-8"); // 指定接收使用的字符集：utf-8
                InputStreamReader inputStreamReaderGbk = new InputStreamReader( // 创建字符输入转换流，参数为文件字节输入流
                        new FileInputStream("file\\charsetTxt\\gbk.txt"), "gbk")) { // 不指定接收使用的字符集：系统默认字符集gbk
            int len = 0; // 读取有效字符的个数
            char[] chars = new char[1024]; // 存储有效字符的数组，一次读取1024个字符
            while ((len = inputStreamReaderUtf8.read(chars)) != -1) {
                System.out.println(new String(chars, 0, len));
            }
            while ((len = inputStreamReaderGbk.read(chars)) != -1) {
                System.out.println(new String(chars, 0, len));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
